# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.

class ApplicationController < ActionController::Base
  # Exception Notifier
  include ExceptionNotifiable
  # alias :rescue_action_locally :rescue_action_in_public

  before_filter :menu_activado
  before_filter :iniciar_carrito
  
  around_filter do |controller, action|
    logger.debug "before #{controller.action_name}"
    action.call
    logger.debug "after #{controller.action_name}"
  end
  
  # usamos siempre el mismo layout
  layout 'layout'
  
  helper :all # include all helpers, all the time
  


  # See ActionController::RequestForgeryProtection for details
  # Uncomment the :secret if you're not using the cookie session store
  protect_from_forgery # :secret => 'adc519167a8d78ba042bd46e9270beb2'

  
  # Hash con las condiciones del 404
  RENDER_404_OPTIONS =  { :template => '/errores/404', :status => '404' }
  
  protected
    #
    # Metodo a invocar en caso de 'no encontrado'
    #
    def render_404
      render RENDER_404_OPTIONS
    end
  
    def es_admin?
      not session[ :user_id ].nil?
    end
  
    def current_pedido
      Pedido.find_by_id( session[ :pedido_id ] )
    end  
      
    def iniciar_carrito
      #  el || muchas veces ocurre que el pedido en sesión ha sido borrado
      if session[ :pedido_id ].nil? || current_pedido.nil?
        pedido = Pedido.new
        pedido.estado = Pedido::ENCARRITO
        pedido.actualizar_transporte( Transporte.por_defecto.id )
        pedido.save
        session[ :pedido_id ] = pedido.id
      end
    end
    
    def validar_admin
      if es_admin?
        return true
      else
        flash[:error] = "No tienes permisos. Necesitas demostrar que eres administradora de esta aplicación, para acceder a esta opción. Por favor inserta tu email y tu clave."
        redirect_to admin_login_url
        return false
      end
    end
    

end
